﻿Imports FairShop
Imports FairShop.Objects
Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System
Imports System.Collections.Generic

<TestClass()> _
Public Class TestPrintVerkoopDocument

    Private testContextInstance As TestContext

    '''<summary>
    '''Gets or sets the test context which provides
    '''information about and functionality for the current test run.
    '''</summary>
    Public Property TestContext() As TestContext
        Get
            Return testContextInstance
        End Get
        Set(ByVal value As TestContext)
            testContextInstance = value
        End Set
    End Property

#Region "Additional test attributes"
    '
    ' You can use the following additional attributes as you write your tests:
    '
    ' Use ClassInitialize to run code before running the first test in the class
    <ClassInitialize()> _
    Public Shared Sub MyClassInitialize(ByVal testContext As TestContext)
        AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory)
    End Sub
    '
    ' Use ClassCleanup to run code after all tests in a class have run
    ' <ClassCleanup()> Public Shared Sub MyClassCleanup()
    ' End Sub
    '
    ' Use TestInitialize to run code before running each test
    ' <TestInitialize()> Public Sub MyTestInitialize()
    ' End Sub
    '
    ' Use TestCleanup to run code after each test has run
    ' <TestCleanup()> Public Sub MyTestCleanup()
    ' End Sub
    '
#End Region

    <TestMethod()> _
    Public Sub BtwTotalenTest()
        ' Arrange
        Dim ds As New ArtikelsDataSet
        Dim verkoop As ArtikelsDataSet.VerkopenRow = ds.Verkopen.NewVerkopenRow()
        ds.Verkopen.AddVerkopenRow(verkoop)
        Dim artikel1 As ArtikelsDataSet.ArtikelsRow = ds.Artikels.NewArtikelsRow()
        artikel1.Omschrijving = "artikel1"
        artikel1.Barcode = "123"
        artikel1.Prijs = 121D
        artikel1.StatiegeldEuro = 10D
        artikel1.BTW = 21S
        ds.Artikels.AddArtikelsRow(artikel1)
        Dim artikel2 As ArtikelsDataSet.ArtikelsRow = ds.Artikels.NewArtikelsRow()
        artikel2.Omschrijving = "artikel2"
        artikel2.Barcode = "123"
        artikel2.Prijs = 242D
        artikel2.StatiegeldEuro = 0D
        artikel2.BTW = 21S
        ds.Artikels.AddArtikelsRow(artikel2)
        Dim artikel3 As ArtikelsDataSet.ArtikelsRow = ds.Artikels.NewArtikelsRow()
        artikel3.Omschrijving = "artikel3"
        artikel3.Barcode = "123"
        artikel3.Prijs = 106D
        artikel3.StatiegeldEuro = 0D
        artikel3.BTW = 6S
        ds.Artikels.AddArtikelsRow(artikel3)
        Dim artikel4 As ArtikelsDataSet.ArtikelsRow = ds.Artikels.NewArtikelsRow()
        artikel4.Omschrijving = "cheque"
        artikel4.Barcode = "123"
        artikel4.Prijs = 25D
        artikel4.StatiegeldEuro = 0D
        artikel4.IsCheque = True
        artikel4.BTW = 0S
        ds.Artikels.AddArtikelsRow(artikel4)

        Dim verkoopsdetail1 As New VerkoopsDetail(verkoop, artikel1, 121D, "", 1, 1)
        Dim verkoopsdetail2 As New VerkoopsDetail(verkoop, artikel2, 242D, "", 1, 1)
        Dim verkoopsdetail3 As New VerkoopsDetail(verkoop, artikel3, 106D, "", 1, 1)
        Dim verkoopsdetail4 As New VerkoopsDetail(verkoop, artikel4, 25D, "", 1, 1)

        ds.VerkoopsDetails.AddVerkoopsDetailsRow(verkoopsdetail1.DataRow) ' anders wordt TotaalStatiegeld niet berekend
        ds.VerkoopsDetails.AddVerkoopsDetailsRow(verkoopsdetail2.DataRow) ' anders wordt TotaalStatiegeld niet berekend
        ds.VerkoopsDetails.AddVerkoopsDetailsRow(verkoopsdetail3.DataRow) ' anders wordt TotaalStatiegeld niet berekend
        ds.VerkoopsDetails.AddVerkoopsDetailsRow(verkoopsdetail4.DataRow) ' anders wordt TotaalStatiegeld niet berekend

        Dim btwTotalen As New BtwTotalen()

        ' Act
        btwTotalen.VoegDetailToe(verkoopsdetail1)
        btwTotalen.VoegDetailToe(verkoopsdetail2)
        btwTotalen.VoegDetailToe(verkoopsdetail3)
        btwTotalen.VoegDetailToe(verkoopsdetail4)

        ' Assert
        Assert.AreEqual(3, btwTotalen.Count)
        Assert.AreEqual(0D, btwTotalen(0).BtwPercentage)
        Assert.AreEqual(35D, btwTotalen(0).TotaalMetBtw)
        Assert.AreEqual(6D, btwTotalen(6).BtwPercentage)
        Assert.AreEqual(106D, btwTotalen(6).TotaalMetBtw)
        Assert.AreEqual(6D, btwTotalen(6).Btw)
        Assert.AreEqual(100D, btwTotalen(6).TotaalZonderBtw)
        Assert.AreEqual(21D, btwTotalen(21).BtwPercentage)
        Assert.AreEqual(363D, btwTotalen(21).TotaalMetBtw)
        Assert.AreEqual(63D, btwTotalen(21).Btw)
        Assert.AreEqual(300D, btwTotalen(21).TotaalZonderBtw)
        Assert.AreEqual(10D, btwTotalen.TotaalLeeggoed)
        Assert.AreEqual(25D, btwTotalen.TotaalCheques, "Verkeerd bedrag totaal cheques")
        Assert.AreEqual(35D, btwTotalen.TotaalLeeggoedEnCheques)
    End Sub

#Region "Helperfuncties"

#End Region

End Class